package com.tsd.core.openweixin;

import com.google.gson.Gson;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.tsd.core.openweixin.model.XcxLogin;

/**
 * @author Hillpool
 */
public class XcxClient {
    /**
     * jscode2session
     * code 换取 session_key
     * 这是一个 HTTPS 接口，开发者服务器使用登录凭证 code 获取 session_key 和 openid。
     * session_key 是对用户数据进行加密签名的密钥。为了自身应用安全，session_key 不应该在网络上传输
     * ?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
     */
    private final static String JSCODE_2_SESSION_URL = "https://api.weixin.qq.com/sns/jscode2session?grant_type=authorization_code";

    public XcxLogin xcxLogin(String appId, String secret, String jsCode) {
        ClientConfig config = new DefaultClientConfig();
        Client client = Client.create(config);
        WebResource webResource = client.resource(JSCODE_2_SESSION_URL);
        ClientResponse clientResponse = webResource
                .queryParam("appid", appId).queryParam("secret", secret).queryParam("js_code", jsCode).get(ClientResponse.class);
        if (clientResponse.getStatus() != 200) {
            throw new IllegalStateException("status error:" + clientResponse.getStatus());
        } else {
            String s = clientResponse.getEntity(String.class);
            return new Gson().fromJson(s, XcxLogin.class);
        }
    }
}
